//package com.fs.core.security.util;
//
//import java.io.IOException;
//
//import javax.servlet.*;
//import javax.servlet.http.HttpServletRequest;
//
//import com.fs.core.security.config.DBConfig;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.context.ApplicationContext;
//
///**
// *
// * @Package: com.jb.f1.security.csrf<br>
// * @ClassName: CsrfFilter<br>
// * @Description: csrf防范过滤器<br>
// */
//public class CsrfFilter implements Filter {
//
//
//	/**
//	 * 日志
//	 */
//	private final Logger log = LoggerFactory.getLogger(this.getClass());
//
//	public void init(FilterConfig filterConfig) throws ServletException {
//		// TODO Auto-generated method stub
//
//	}
//
//	@Override
//	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//		if (!isNeedFilter(request)) {
//			chain.doFilter(request, response);
//		} else {
//			this.filter(request, response, chain);
//		}
//	}
//
//	public void filter(ServletRequest request, ServletResponse response, FilterChain chain)
//			throws IOException, ServletException {
//		log.info("进行CsrfFilter");
//		// 系统配置的域名
//		ApplicationContext context = SpringUtil.getApplicationContext();
//		DBConfig dBConfig = context.getBean(DBConfig.class);// 注意是Service，不是ServiceImpl
//		String domainName = dBConfig.getDomainName();//域名地址的ip
//
//		// 从 HTTP 头中取得 Referer 值
//		String referer = ((HttpServletRequest) request).getHeader("Referer");
//		// 如果没有配置域名则不进行验证，否则继续判断 Referer 是否以对应的域名 开头
//		// 均不为空时进行域的判断
//		boolean isSafe = false;
//		if (domainName != null && referer != null && !"".equals(referer) && !"".equals(domainName)) {
//			for (String domian : domainName.split(",")) {
//				if (referer.startsWith(domian)) {
//					isSafe = true;
//					chain.doFilter(request, response);
//					break;
//				}
//			}
//			if (!isSafe) {
//				throw new ServletException("无法验证来源");
//			}
//		} else {
//			log.info("结束CsrfFilter");
//			chain.doFilter(request, response);
//		}
//
//	}
//
//	@Override
//	public void destroy() {
//		// TODO Auto-generated method stub
//
//	}
//
//
//
//	/**
//	 * 判断是否需要进行过滤
//	 *
//	 * @param request
//	 *            请求request
//	 * @return
//	 */
//	private boolean isNeedFilter(ServletRequest request) {
//		String content_Type = ((HttpServletRequest) request).getHeader("Content-Type");
//		if (content_Type != null && content_Type.contains("multipart/form-data")) {
//			return false;
//		}
//		ApplicationContext context = SpringUtil.getApplicationContext();
//		DBConfig dBConfig = context.getBean(DBConfig.class);// 注意是Service，不是ServiceImpl
//		String isSafe = dBConfig.getIsCsrfSafe();//是否csrf安全模式
//		if ( "T".equals(isSafe)) {
//			return true;
//		}
//		return false;
//	}
//
//}
